package field

import (
	"yunj/pkg/yunj/core/builder/form"
	"yunj/pkg/yunj/util"
)

// 富文本
type Editor struct {
	form.Field
	Toolbar []string `json:"toolbar"` // 工具栏。详见ckeditor
}

func NewEditor(id string, title ...string) *Editor {
	f := &Editor{}
	form.SetFieldInstance(&f.Field, f)
	f.SetFieldId(id)
	if len(title) > 0 {
		f.SetTitle(title[0])
	}
	return f
}

// 设置标题
func (f *Editor) SetTitle(title string) *Editor {
	f.Title = title
	return f
}

// 设置默认值
func (f *Editor) SetDefault(def any) *Editor {
	f.Default = def
	return f
}

// 设置描述
func (f *Editor) SetDesc(desc string) *Editor {
	f.Desc = desc
	return f
}

// 设置验证规则
func (f *Editor) SetVerify(rule string) *Editor {
	f.Verify = rule
	return f
}

// 设置验证标题
func (f *Editor) SetVerifyTitle(verifyTitle string) *Editor {
	f.VerifyTitle = verifyTitle
	return f
}

// 增加验证规则
func (f *Editor) AddVerify(rule string) *Editor {
	f.AddFieldVerify(rule)
	return f
}

// 设置是否只读
func (f *Editor) SetReadonly(yes bool) *Editor {
	f.Readonly = yes
	return f
}

// 设置栅格布局
// 超小屏幕(手机<768px)、小屏幕(平板≥768px)、中等屏幕(桌面≥992px)、大型屏幕(桌面≥1200px)、超大屏幕(桌面≥1400px)
// 总列数：12
func (f *Editor) SetGrid(num ...any) *Editor {
	f.Grid = num
	return f
}

// 设置权限
func (f *Editor) SetAuth(auth string) *Editor {
	f.Auth = auth
	return f
}

// 设置工具栏。详见ckeditor
func (f *Editor) SetToolbar(toolbar []string) *Editor {
	f.Toolbar = toolbar
	return f
}

// 处理属性
func (f *Editor) HandleAttr() error {
	defToolbar := []string{
		"Source", "-", "Undo", "Redo", "-", "Preview", "-", "SelectAll", "-", "Bold", "Italic", "Underline", "Strike", "-",
		"NumberedList", "BulletedList", "-", "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock", "-",
		"BidiLtr", "BidiRtl", "-", "Link", "Image", "CodeSnippet", "-", "Styles", "Format", "Font", "FontSize", "-",
		"TextColor", "BGColor", "-", "Maximize",
	}
	if len(f.Toolbar) > 0 {
		f.Toolbar = util.SliceIntersect(f.Toolbar, defToolbar)
	} else {
		f.Toolbar = defToolbar
	}
	return nil
}
